// #include<iostream>
// #include<memory>
// #include<new>
//
// using namespace std;
// void deleteP(int* p);
//
// typedef long long int64;
//
//
// void test_unique_ptr()
// {
//     unique_ptr<int> p1(new int(888));
//     cout << *p1 << endl;
//     cout << *p1.get() << endl;
//     //禁止拷贝构造 禁止赋值
//     // unique_ptr<int> p3(p1);
//     // p3 = p1; //错误
//     //改变独享型智能指针管理对象
//     //move语句转交所有权
//     //reset结合release函数完成
//
//     unique_ptr<int> data(new int(999));
//
//     unique_ptr<int> value;
//
//     //move语句转交所有权
//     value = move(data); //第一种方案
//
//     cout << *value << endl;
//     cout << *value.get() << endl;
//
//     //通过reset函数 重新设置管理对象 release
//
//     data.reset(value.release());
//
//     cout << *data << endl;
//     cout << *data.get() << endl; //断开连接
//
//
//     //独享智能指针 删除器写法  和shared_ptr不一样 需要手动指定删除器类型
//     using FuncType = void(*)(int*);
//     unique_ptr<int,FuncType> uint(new int(333),[](int* p){delete p;});
//     //无法推断
//     using Type = void(*)(int*);
//     unique_ptr<int,Type> uintt(new int(333),deleteP);
//     using TypeFILE = void(*)(FILE*);
//     auto file_func=[](FILE* fp){fclose(fp);cout <<"文件指针释放成功" << endl;};
//     unique_ptr<FILE,TypeFILE> fp2(fopen("1.txt","w+"),file_func);
//     unique_ptr<FILE,decltype(file_func)> fp3(fopen("1.txt","w+"),file_func);
//
// }
//
// void deleteP(int* p)
// {
//     delete(p);
// }
//
//
// int main()
// {
//     test_unique_ptr();
//
//     return 0;
// }